package es.itpyme.websip.web.controller;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import es.itpyme.websip.domain.IConstantesDomain;
import es.itpyme.websip.domain.Usuario;
import es.itpyme.websip.domain.Version;
import es.itpyme.websip.domain.exceptions.ItemNotFoundException;
import es.itpyme.websip.domain.exceptions.ValidateException;
import es.itpyme.websip.dto.FiltroUsuarioDto;
import es.itpyme.websip.dto.FiltroVersionesDto;
import es.itpyme.websip.services.IUserService;
import es.itpyme.websip.services.IVersionService;
import es.itpyme.websip.util.LogUtil;
import es.itpyme.websip.web.beans.IConstantesWeb;
import es.itpyme.websip.web.beans.PrincipalBean;
import es.itpyme.websip.web.beans.UsuarioBean;
import es.itpyme.websip.web.beans.VersionBean;

//@ManagedBean(name="versionController")
public class VersionController  extends BaseController{  

	
//	@ManagedProperty("#{usuarioBean}")
	private UsuarioBean usuarioBean;
	
//	@ManagedProperty("#{principalBean}")
	private PrincipalBean principalBean;
	
//	@ManagedProperty("#{versionBean}")
	private VersionBean versionBean;

//	@ManagedProperty("#{versionService}")
	private IVersionService versionService;
	
//	@ManagedProperty("#{userService}")
	private IUserService userService;

	private List usuariosPorRole;
	
	public UsuarioBean getUsuarioBean() {
		return usuarioBean;
	}

	public void setUsuarioBean(UsuarioBean usuarioBean) {
		this.usuarioBean = usuarioBean;
	}

	public PrincipalBean getPrincipalBean() {
		return principalBean;
	}

	public void setPrincipalBean(PrincipalBean principalBean) {
		this.principalBean = principalBean;
	}
	
	
	
	public VersionBean getVersionBean() {
		return versionBean;
	}

	public void setVersionBean(VersionBean versionBean) {
		this.versionBean = versionBean;
	}

	public String grabarVersion(){
		  
		System.out.println("grabando nuevo proyecto");
		//IVersionService versionService=(IVersionService)getAppContext().getBean(IConstantesWeb.SPRING_BEAN_VERSION);
		
		versionService.grabarVersion(versionBean.getVersion());
		
		versionBean.addVersionPorUsuario(versionBean.getVersion());
		
		return IConstantesWeb.URL_PRINCIPAL;
		
	}
	
	
	public String modVersion(){
		  
		LogUtil.debugIni(log);
		try {
			
			//IVersionService versionService=(IVersionService)getAppContext().getBean(IConstantesWeb.SPRING_BEAN_VERSION);
			
			String versionId=(String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(IConstantesWeb.PARAM_VERSION_ID);
			
			if(versionId!=null){
				Long selectedVersion=Long.valueOf(versionId);	
				Version version= versionService.getVersion(selectedVersion);
				versionBean.setVersion(version);					
				return IConstantesWeb.URL_NUEVA_VERSION;
				
			}
		
		} catch (ItemNotFoundException e) {
			FacesMessage message=new FacesMessage(e.getMessage());
			FacesContext.getCurrentInstance().addMessage(null, message);
			
		}finally{
			LogUtil.debugFin(log);
		}
		
		return null;
		
		
	}

	public IVersionService getVersionService() {
		return versionService;
	}

	public void setVersionService(IVersionService versionService) {
		this.versionService = versionService;
	}
	
	
	public List<SelectItem> getSversionesPorProyecto(){
		
		try{
			Long proyectoId=usuarioBean.getFiltroUsuarioDto().getProyecto();
			List<Version> versionesPorProyecto=this.versionService.getVersionesPorProyecto(proyectoId, IConstantesDomain.ESTADO_ACTIVO);
			versionBean.setVersionesPorProyecto(versionesPorProyecto);
		}catch(ItemNotFoundException e){
			FacesMessage message=new FacesMessage(e.getMessage());
			FacesContext.getCurrentInstance().addMessage(null, message);
		}
		return versionBean.getSversionesPorProyecto();
		
		
		
	}
	
	public void setSVersionesPorProyecto(List<SelectItem> sversionesPorProyecto){
		this.versionBean.setSversionesPorProyecto(sversionesPorProyecto);
		
	}
	
	public String prepararVersiones(){
		return IConstantesWeb.URL_VERSIONES; 
		
	}
	
	public void buscarVersiones(){
		try{
			FiltroVersionesDto filtroVersionesDto=versionBean.getFiltroVersionDto();
			List<Version> versiones=this.versionService.getVersiones(filtroVersionesDto);
			versionBean.setVersionesPorProyecto(versiones);
		}catch(ItemNotFoundException e){
			FacesMessage message=new FacesMessage(e.getMessage());
			FacesContext.getCurrentInstance().addMessage(null, message);
		}
		
	}

	public IUserService getUserService() {
		return userService;
	}

	public void setUserService(IUserService userService) {
		this.userService = userService;
	}
	
	public List<Usuario> getUsuariosPorRole(){
		
		if (versionBean.getFiltroVersionDto()!=null){
		
		String role=versionBean.getFiltroVersionDto().getRole();
		if (role!=null){
			FiltroUsuarioDto filtroUsuarioDto=new FiltroUsuarioDto();  
			filtroUsuarioDto.setEstado(IConstantesDomain.ESTADO_ACTIVO);
			filtroUsuarioDto.setRole(role);
			try {
				usuarioBean.setUsuarios(userService.buscarUsuarios(filtroUsuarioDto));
				
			} catch (ItemNotFoundException e) {
				
//				log.error(e);
			} catch (ValidateException e) {
				
//				log.error(e);
			}
		}
		}
		return usuarioBean.getUsuarios();
		
	}

	public void setUsuariosPorRole(List usuariosPorRole) {
		this.usuariosPorRole = usuariosPorRole;
	}
	
	
	
	
}

	